package com.guli.gulimall.product.service.impl;

import org.springframework.stereotype.Service;

import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;

import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.guli.common.utils.PageUtils;
import com.guli.common.utils.Query;

import com.guli.gulimall.product.dao.CategoryDao;
import com.guli.gulimall.product.entity.CategoryEntity;
import com.guli.gulimall.product.service.CategoryService;


@Service("categoryService")
public class CategoryServiceImpl extends ServiceImpl<CategoryDao, CategoryEntity> implements CategoryService {

    @Override
    public PageUtils queryPage(Map<String, Object> params) {
        IPage<CategoryEntity> page = this.page(
                new Query<CategoryEntity>().getPage(params),
                new QueryWrapper<CategoryEntity>()
        );

        return new PageUtils(page);
    }

    //使用递归的方法  （三级分类树优化）
    @Override
    public List<CategoryEntity> treeList() {
        //1.查询所有的三级分类信息 1425条
        List<CategoryEntity> allList = baseMapper.selectList(null);

        //2.在allLis中获取一级分类集合
        //stream()变成流的形式
        //item 就是集合中的每一个元素
        List<CategoryEntity> children = allList.stream().filter(item -> {
            //拿到条件为0的1级分类
            return item.getParentCid().equals(0l);
        }).map(item -> {//item 此时为过滤后的结果
            //需要在这个位置找到二级分类
            //找子元素的方法 children为二级分类  （已经包含了三级分类）
            List<CategoryEntity> children1 = getChildren(allList, item);
            item.setChildren(children1);

            return item;
        }).sorted((s1,s2)->{
            //对三级数拖拽并修改后的数据进行重新排序
            return (s1.getSort()==null?0:s1.getSort())-(s2.getSort()==null?0:s2.getSort());
        }).collect(Collectors.toList());
        return children;
    }
    //找子元素的方法
    private List<CategoryEntity> getChildren(List<CategoryEntity> allList,CategoryEntity categoryEntity){
        List<CategoryEntity> children = allList.stream().filter(item -> {
            //如果分类的父id与它的id相同则为二级分类
            return item.getParentCid().equals(categoryEntity.getCatId());
        }).map(item -> {
            //查询三级分类  类推
            List<CategoryEntity> children1 = getChildren(allList, item);
            item.setChildren(children1);
            return item;
        }).sorted((s1,s2)->{
            //对三级数拖拽并修改后的数据进行重新排序
            return (s1.getSort()==null?0:s1.getSort())-(s2.getSort()==null?0:s2.getSort());
        }).collect(Collectors.toList());
        return children;
    }

    //使用循环查询三级树
  //  @Override
 //   public List<CategoryEntity> treeList() {

//        //1.查询1级分类
//        List<CategoryEntity> l1list = baseMapper.selectList(null);
//        //2.遍历所有的1级分类  得到分类编号得到二级分类的pid
//        //遍历1级分类 通过一级分类的id查到二级分类的pid
//        for (CategoryEntity ll : l1list) {
//            Long catId = ll.getCatId();
//            List<CategoryEntity> l2List = baseMapper.selectList(new QueryWrapper<CategoryEntity>().eq("parent_cid", catId));
//            ll.setChildren(l2List);
//            //3.遍历每个二级分类查询到3级分类集合
//            for (CategoryEntity l2 : l2List) {
//                Long catId1 = l2.getCatId();
//                List<CategoryEntity> l3List = baseMapper.selectList(new QueryWrapper<CategoryEntity>().eq("parent_cid", catId));
//                l2.setChildren(l3List);
//            }
//        }
  //      return null;
  //  }

}